#ifndef _DeviceOutput_h
#define _DeviceOutput_h

#include "CxxUtils.h"
#include "LangUtils.h"

class DoOpDeviceOutput
{
public: 
	class ds_showpage : public _DoOperator
	{
	protected: 
		ds_showpage(const ds_showpage &);
		ds_showpage& operator=(const ds_showpage &);
	public: 
		ds_showpage() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_copypage : public _DoOperator
	{
	protected: 
		ds_copypage(const ds_copypage &);
		ds_copypage& operator=(const ds_copypage &);
	public: 
		ds_copypage() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_setpagedevice : public _DoOperator
	{
	protected: 
		ds_setpagedevice(const ds_setpagedevice &);
		ds_setpagedevice& operator=(const ds_setpagedevice &);
	public: 
		ds_setpagedevice() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_currentpagedevice : public _DoOperator
	{
	protected: 
		ds_currentpagedevice(const ds_currentpagedevice &);
		ds_currentpagedevice& operator=(const ds_currentpagedevice &);
	public: 
		ds_currentpagedevice() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_nulldevice : public _DoOperator
	{
	protected: 
		ds_nulldevice(const ds_nulldevice &);
		ds_nulldevice& operator=(const ds_nulldevice &);
	public: 
		ds_nulldevice() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	static void push(_DoDictionaryMultimap& dict) {
		dict.put(CRefPtr< _DoObject >(new DoName("showpage")), CRefPtr< _DoObject >(new ds_showpage()));
		dict.put(CRefPtr< _DoObject >(new DoName("copypage")), CRefPtr< _DoObject >(new ds_copypage()));
		dict.put(CRefPtr< _DoObject >(new DoName("setpagedevice")), CRefPtr< _DoObject >(new ds_setpagedevice()));
		dict.put(CRefPtr< _DoObject >(new DoName("currentpagedevice")), CRefPtr< _DoObject >(new ds_currentpagedevice()));
		dict.put(CRefPtr< _DoObject >(new DoName("nulldevice")), CRefPtr< _DoObject >(new ds_nulldevice()));
	}
};

#endif
